<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>String interpolation</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/String_interpolation"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-String_interpolation rootpage-String_interpolation skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">String interpolation</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>In <a href="Computer_programming" title="Computer programming">computer programming</a>, <b>string interpolation</b> (or <b>variable interpolation</b>, <b>variable substitution</b>, or <b>variable expansion</b>) is the process of evaluating a <a href="String_literal" title="String literal">string literal</a> containing one or more <a href="Form_(document)#Placeholders" title="Form (document)">placeholders</a>, yielding a result in which the placeholders are replaced with their corresponding values. It is a form of simple <a href="Template_processor" title="Template processor">template processing</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> or, in formal terms, a form of <a href="Quasi-quotation" title="Quasi-quotation">quasi-quotation</a> (or logic <a href="Substitution_(logic)" title="Substitution (logic)">substitution</a> interpretation). The placeholder may be a variable name, or in some languages an arbitrary expression, in either case evaluated in the current <a href="Scope_(computer_science)" title="Scope (computer science)">context</a>.
</p><p>String interpolation is an alternative to building string via <a href="Concatenation" title="Concatenation">concatenation</a>, which requires repeat quoting and unquoting;<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> or substituting into a <a href="Printf_format_string" class="mw-redirect" title="Printf format string">printf format string</a>, where the variable is far from where it is used. Compare:
</p>
<div class="mw-highlight mw-highlight-lang-ruby mw-content-ltr" dir="ltr"><pre><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have </span><span class="si">#{</span><span class="n">apples</span><span class="si">}</span><span class="s2"> apples."</span><span class="w"> </span><span class="c1"># string interpolation</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nb">String</span><span class="p">(</span><span class="n">apples</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">" apples."</span><span class="w"> </span><span class="c1"># string concatenation</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have %d apples."</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">apples</span><span class="w"> </span><span class="c1"># format string</span>
</pre></div>
<p>Two types of literal expression are usually offered: one with interpolation enabled, the other without. Non-interpolated strings may also <a href="Escape_sequence" title="Escape sequence">escape sequences</a>, in which case they are termed a <a href="Raw_string" class="mw-redirect" title="Raw string">raw string</a>, though in other cases this is separate, yielding three classes of raw string, non-interpolated (but escaped) string, interpolated (and escaped) string. For example, in Unix shells, single-quoted strings are raw, while double-quoted strings are interpolated. Placeholders are usually represented by a bare or a named <a href="Sigil_(computer_programming)" title="Sigil (computer programming)">sigil</a> (typically <code>$</code> or <code>%</code>), e.g. <code>$apples</code> or <code>%apples</code>, or with braces, e.g. <code>{apples}</code>, sometimes both, e.g. <code>${apples}</code>. In some cases additional formatting specifiers can be used (as in printf), e.g. <code>{apples:3}</code>, and in some cases the formatting specifiers themselves can be interpolated, e.g. <code>{apples:width}</code>. Expansion of the string usually occurs at <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">run time</a>.
</p><p>Language support for string interpolation varies widely. Some languages do not offer string interpolation, instead using concatenation, simple formatting functions, or template libraries. String interpolation is common in many <a href="Programming_language" title="Programming language">programming languages</a> which make heavy use of <a href="String_(computer_science)" title="String (computer science)">string</a> representations of data, such as <a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Apache Groovy</a>, <a href="Julia_(programming_language)" title="Julia (programming language)">Julia</a>, <a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a>, <a href="Perl" title="Perl">Perl</a>, <a href="PHP" title="PHP">PHP</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a>, <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>, <a href="Tcl" title="Tcl">Tcl</a> and most <a href="Unix_shell" title="Unix shell">Unix shells</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Algorithms">Algorithms</h2></div>
<p>There are two main types of variable-expanding algorithms for <i>variable interpolation</i>:<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<ol><li><i>Replace and expand placeholders</i>: creating a new string from the original one, by find–replace operations. Find variable reference (placeholder), replace it by its variable value. This algorithm offers no cache strategy.</li>
<li><i>Split and join string</i>: splitting the string into an array, merging it with the corresponding array of values, then joining items by concatenation. The split string can be cached for reuse.</li></ol>
<div class="mw-heading mw-heading2"><h2 id="Security_issues">Security issues</h2></div>
<p>String interpolation, like string concatenation, may lead to security problems. If user input data is improperly escaped or filtered, the system will be exposed to <a href="SQL_injection" title="SQL injection">SQL injection</a>, <a href="Script_injection" class="mw-redirect" title="Script injection">script injection</a>, <a href="XML_external_entity_attack" title="XML external entity attack">XML external entity (XXE) injection</a>, and <a href="Cross-site_scripting" title="Cross-site scripting">cross-site scripting</a> (XSS) attacks.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p>An SQL injection example:
</p>
<pre>query = "<code class="mw-highlight mw-highlight-lang-sql mw-content-ltr" style="" dir="ltr"><span class="k">SELECT</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">,</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">Table</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="s1">'$id'</span></code> "
</pre>
<p>If <i><code>$id</code></i> is replaced with <i>"<code>'; <code class="mw-highlight mw-highlight-lang-sql mw-content-ltr" style="" dir="ltr"><span class="k">DELETE</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">Table</span><span class="p">;</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">Table</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="err">'</span></code></code>"</i>, executing this query will wipe out all the data in <code>Table</code>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<div class="mw-heading mw-heading3"><h3 id="ABAP">ABAP</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="ABAP" title="ABAP">ABAP</a></div>
<div class="mw-highlight mw-highlight-lang-abap mw-content-ltr" dir="ltr"><pre><span class="k">DATA</span><span class="p">(</span><span class="nv">apples</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">.</span>
<span class="k">WRITE</span><span class="w"> </span><span class="p">|</span><span class="s1">I have </span><span class="p">{</span><span class="w"> </span><span class="nv">apples</span><span class="w"> </span><span class="p">}</span><span class="s1"> apples</span><span class="p">|.</span>
</pre></div><p>The output will be:</p><div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Bash">Bash</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Bash_(Unix_shell)" title="Bash (Unix shell)">Bash (Unix shell)</a></div>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span class="nv">apples</span><span class="o">=</span><span class="m">4</span>
<span class="nb">echo</span><span class="w"> </span><span class="s2">"I have </span><span class="nv">$apples</span><span class="s2"> apples"</span>
<span class="c1"># or</span>
<span class="nb">echo</span><span class="w"> </span><span class="s2">"I have </span><span class="si">${</span><span class="nv">apples</span><span class="si">}</span><span class="s2"> apples"</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Boo">Boo</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Boo_(programming_language)" title="Boo (programming language)">Boo (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-boo mw-content-ltr" dir="ltr"><pre><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"I have $(apples) apples"</span><span class="p">)</span>
<span class="c1"># or</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"I have {0} apples"</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">apples</span><span class="p">)</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="C#">C#</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C Sharp (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span class="kt">var</span><span class="w"> </span><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">4</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">;</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">$"I have {apples} apples"</span><span class="p">);</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">$"I have {apples + bananas} fruits"</span><span class="p">);</span>
</pre></div><p><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
<span class="go">I have 7 fruits</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="ColdFusion_Markup_Language">ColdFusion Markup Language</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="ColdFusion_Markup_Language" title="ColdFusion Markup Language">ColdFusion Markup Language</a></div>
<p><a href="ColdFusion_Markup_Language" title="ColdFusion Markup Language">ColdFusion Markup Language</a> (CFML) script syntax:
</p>
<div class="mw-highlight mw-highlight-lang-cfc mw-content-ltr" dir="ltr"><pre><span class="nv">apples</span> <span class="o">=</span> <span class="m">4</span><span class="p">;</span>
<span class="nf">writeOutput</span><span class="p">(</span><span class="s2">"I have </span><span class="s s-Interp">#apples#</span><span class="s2"> apples"</span><span class="p">);</span>
</pre></div>
<p>Tag syntax:
</p>
<div class="mw-highlight mw-highlight-lang-cfm mw-content-ltr" dir="ltr"><pre><span class="nb"><cfset</span> <span class="nv">apples</span> <span class="o">=</span> <span class="m">4</span><span class="nb">></span>
<span class="nb"><cfoutput></span>I have <span class="p">#</span><span class="nv">apples</span><span class="p">#</span> apples<span class="nb"></cfoutput></span>
</pre></div>
<p>The output will be:
</p>
<pre><samp style="padding-left:0.4em; padding-right:0.4em; color:var( --color-subtle, #666666);">I have 4 apples</samp>
</pre>
<div class="mw-heading mw-heading3"><h3 id="CoffeeScript">CoffeeScript</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="CoffeeScript" title="CoffeeScript">CoffeeScript</a></div>
<div class="mw-highlight mw-highlight-lang-coffeescript mw-content-ltr" dir="ltr"><pre><span class="nv">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="w"> </span><span class="s">"I have </span><span class="si">#{</span><span class="nx">apples</span><span class="si">}</span><span class="s"> apples"</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Dart">Dart</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Dart_(programming_language)" title="Dart (programming language)">Dart (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-dart mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">4</span><span class="p">,</span><span class="w"> </span><span class="n">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">;</span>
<span class="n">print</span><span class="p">(</span><span class="s1">'I have </span><span class="si">$</span><span class="n">apples</span><span class="s1"> apples.'</span><span class="p">);</span>
<span class="n">print</span><span class="p">(</span><span class="s1">'I have </span><span class="si">${</span><span class="n">apples</span><span class="o">+</span><span class="n">bananas</span><span class="si">}</span><span class="s1"> fruits.'</span><span class="p">);</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples.</span>
<span class="go">I have 7 fruits.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Go">Go</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Go_(programming_language)" title="Go (programming language)">Go (programming language)</a></div>
<p>As of 2025, Go does not have string interpolation. There have been some proposals for string interpolation, which have been rejected.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Groovy">Groovy</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy (programming language)</a></div>
<p>In groovy, interpolated strings are known as GStrings:<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span class="kt">def</span><span class="w"> </span><span class="n">quality</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"superhero"</span>
<span class="kd">final</span><span class="w"> </span><span class="n">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">52</span>
<span class="kt">def</span><span class="w"> </span><span class="n">sentence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"A developer is a $quality if he is ${age <= 42 ? 'young' : 'seasoned'}"</span>
<span class="n">println</span><span class="w"> </span><span class="n">sentence</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">A developer is a superhero if he is seasoned</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Haxe">Haxe</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Haxe" title="Haxe">Haxe</a></div>
<div class="mw-highlight mw-highlight-lang-haxe mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span>apples<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span>bananas<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="n">trace</span><span class="p">(</span><span class="s1">'I have </span><span class="si">$</span><span class="n">apples</span><span class="s1"> apples.'</span><span class="p">);</span>
<span class="n">trace</span><span class="p">(</span><span class="s1">'I have </span><span class="si">${</span><span class="n">apples</span><span class="o">+</span><span class="n">bananas</span><span class="si">}</span><span class="s1"> fruits.'</span><span class="p">);</span>
</pre></div>
<p>The output will be:<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples.</span>
<span class="go">I have 7 fruits.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Java">Java</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Java_(programming_language)" title="Java (programming language)">Java (programming language)</a></div><p>
Java had interpolated strings as a preview feature in Java 21 and Java 22. You could use the constant STR of <a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringTemplate.html">java.lang.StringTemplate</a> directly.</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span class="kd">enum</span><span class="w"> </span><span class="n">Stage</span><span class="p">{</span><span class="n">test</span><span class="p">,</span><span class="n">qa</span><span class="p">,</span><span class="n">prod</span><span class="p">}</span>
<span class="kd">record</span> <span class="nc">Deploy</span><span class="p">(</span><span class="n">UUID</span><span class="w"> </span><span class="n">image</span><span class="p">,</span><span class="w"> </span><span class="n">Stage</span><span class="w"> </span><span class="n">stage</span><span class="p">){}</span>
<span class="kd">var</span><span class="w"> </span><span class="n">deploy</span><span class="o">=</span><span class="k">new</span><span class="w"> </span><span class="n">Deploy</span><span class="p">(</span><span class="n">UUID</span><span class="p">.</span><span class="na">randomUUID</span><span class="p">(),</span><span class="w"> </span><span class="n">Stage</span><span class="p">.</span><span class="na">test</span><span class="p">)</span>
<span class="n">STR</span><span class="p">.</span><span class="s">"Installing \{deploy.image()} on Stage \{deploy.stage()} ..."</span>
<span class="kd">var</span><span class="w"> </span><span class="n">deploy</span><span class="o">=</span><span class="k">new</span><span class="w"> </span><span class="n">Deploy</span><span class="p">(</span><span class="n">UUID</span><span class="p">.</span><span class="na">randomUUID</span><span class="p">(),</span><span class="w"> </span><span class="n">Stage</span><span class="p">.</span><span class="na">prod</span><span class="p">)</span>
<span class="n">STR</span><span class="p">.</span><span class="s">"Installing \{deploy.image()} on Stage \{deploy.stage()} ..."</span>
</pre></div>
<p>They were removed in Java 23 due to design issues.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="JavaScript">JavaScript</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="JavaScript" title="JavaScript">JavaScript</a></div>
<p><a href="JavaScript" title="JavaScript">JavaScript</a>, as of the <a href="ECMAScript" title="ECMAScript">ECMAScript</a> 2015 (ES6) standard, supports string interpolation using backticks <code>``</code>. This feature is called <i>template literals</i>.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> Here is an example:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">const</span><span class="w"> </span><span class="nx">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">4</span><span class="p">;</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">3</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`I have </span><span class="si">${</span><span class="nx">apples</span><span class="si">}</span><span class="sb"> apples`</span><span class="p">);</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`I have </span><span class="si">${</span><span class="nx">apples</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">bananas</span><span class="si">}</span><span class="sb"> fruits`</span><span class="p">);</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
<span class="go">I have 7 fruits</span>
</pre></div>
<p>Template literals can also be used for multi-line strings:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`This is the first line of text.</span>
<span class="sb">This is the second line of text.`</span><span class="p">);</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">This is the first line of text.</span>
<span class="go">This is the second line of text.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Julia">Julia</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Julia_(programming_language)" title="Julia (programming language)">Julia (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-julia mw-content-ltr" dir="ltr"><pre><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="n">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span>
<span class="n">print</span><span class="p">(</span><span class="s">"I have </span><span class="si">$apples</span><span class="s"> apples and </span><span class="si">$bananas</span><span class="s"> bananas, making </span><span class="si">$</span><span class="p">(</span><span class="n">apples</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">bananas</span><span class="p">)</span><span class="s"> pieces of fruit in total."</span><span class="p">)</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples and 3 bananas, making 7 pieces of fruit in total.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Kotlin">Kotlin</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-kotlin mw-content-ltr" dir="ltr"><pre><span class="kd">val</span><span class="w"> </span><span class="nv">quality</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"superhero"</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">4</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">sentence</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"A developer is a </span><span class="si">$</span><span class="n">quality</span><span class="s">. I have </span><span class="si">${</span><span class="n">apples</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">bananas</span><span class="si">}</span><span class="s"> fruits"</span>
<span class="n">println</span><span class="p">(</span><span class="n">sentence</span><span class="p">)</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">A developer is a superhero. I have 7 fruits</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Nemerle">Nemerle</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Nemerle" title="Nemerle">Nemerle</a></div>
<div class="mw-highlight mw-highlight-lang-boo mw-content-ltr" dir="ltr"><pre><span class="k">def</span><span class="w"> </span><span class="nf">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="err">$</span><span class="s2">"I have $apples apples."</span><span class="p">);</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="err">$</span><span class="s2">"I have $(apples + bananas) fruit."</span><span class="p">);</span>
</pre></div>
<p>It also supports advanced formatting features, such as:
</p>
<div class="mw-highlight mw-highlight-lang-boo mw-content-ltr" dir="ltr"><pre><span class="k">def</span><span class="w"> </span><span class="nf">fruit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">"apple"</span><span class="p">,</span><span class="w"> </span><span class="s2">"banana"</span><span class="p">];</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="err">$</span><span class="o"><</span><span class="c1">#I have ..$(fruit; "\n"; f => f + "s")#>);</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">apples</span>
<span class="go">bananas</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Nim">Nim</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Nim_(programming_language)" title="Nim (programming language)">Nim (programming language)</a></div>
<p>Nim provides string interpolation via the strutils module.
Formatted string literals inspired by Python F-string are provided via the strformat module,
the strformat macro verifies that the format string is well-formed and well-typed,
and then are expanded into Nim source code at compile-time.
</p>
<div class="mw-highlight mw-highlight-lang-nim mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="n">strutils</span><span class="p">,</span><span class="w"> </span><span class="n">strformat</span>
<span class="kd">var</span><span class="w"> </span><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="kd">var</span><span class="w"> </span><span class="n">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span>
<span class="n">echo</span><span class="w"> </span><span class="s">"I have </span><span class="si">$1</span><span class="s"> apples"</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="n">apples</span><span class="p">)</span>
<span class="n">echo</span><span class="w"> </span><span class="s">fmt"I have {apples} apples"</span>
<span class="n">echo</span><span class="w"> </span><span class="s">fmt"I have {apples + bananas} fruits"</span>
<span class="c"># Multi-line</span>
<span class="n">echo</span><span class="w"> </span><span class="s">fmt"</span><span class="se">""</span>
<span class="n">I</span><span class="w"> </span><span class="n">have</span><span class="w"> </span>
<span class="p">{</span><span class="n">apples</span><span class="p">}</span><span class="w"> </span><span class="s">apples"</span><span class="se">""</span>
<span class="c"># Debug the formatting</span>
<span class="n">echo</span><span class="w"> </span><span class="s">fmt"I have {apples=} apples"</span>
<span class="c"># Custom openChar and closeChar characters</span>
<span class="n">echo</span><span class="w"> </span><span class="n">fmt</span><span class="p">(</span><span class="s">"I have (apples) {apples}"</span><span class="p">,</span><span class="w"> </span><span class="sc">'('</span><span class="p">,</span><span class="w"> </span><span class="sc">')'</span><span class="p">)</span>
<span class="c"># Backslash inside the formatted string literal</span>
<span class="n">echo</span><span class="w"> </span><span class="s">fmt"</span><span class="se">""</span><span class="s">{ "</span><span class="n">yep</span><span class="o">\</span><span class="s">nope" }</span><span class="se">""</span><span class="s">"</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
<span class="go">I have 4 apples</span>
<span class="go">I have 7 fruits</span>
<span class="go">I have</span>
<span class="go">4 apples</span>
<span class="go">I have apples=4 apples</span>
<span class="go">I have 4 {apples}</span>
<span class="go">yep</span>
<span class="go">ope</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Nix">Nix</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Nix_package_manager" class="mw-redirect" title="Nix package manager">Nix package manager</a></div>
<div class="mw-highlight mw-highlight-lang-nix mw-content-ltr" dir="ltr"><pre><span class="k">let</span> <span class="ss">numberOfApples</span> <span class="o">=</span> <span class="s2">"4"</span><span class="p">;</span>
<span class="k">in</span> <span class="s2">"I have </span><span class="si">${</span>numberOfApples<span class="si">}</span><span class="s2"> apples"</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="ParaSail">ParaSail</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="ParaSail_(programming_language)" title="ParaSail (programming language)">ParaSail (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-parasail mw-content-ltr" dir="ltr"><pre><span class="kr">const</span> <span class="n">Apples</span> <span class="o">:=</span> <span class="mi">4</span>
<span class="kr">const</span> <span class="n">Bananas</span> <span class="o">:=</span> <span class="mi">3</span>
<span class="n">Println</span> <span class="p">(</span><span class="s">"I have `(Apples) apples.\n"</span><span class="p">)</span>
<span class="n">Println</span> <span class="p">(</span><span class="s">"I have `(Apples+Bananas) fruits.\n"</span><span class="p">)</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples.</span>
<span class="go">I have 7 fruits.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Perl">Perl</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Perl" title="Perl">Perl</a></div>
<div class="mw-highlight mw-highlight-lang-perl mw-content-ltr" dir="ltr"><pre><span class="k">my</span><span class="w"> </span><span class="nv">$apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
<span class="k">my</span><span class="w"> </span><span class="nv">$bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="k">print</span><span class="w"> </span><span class="s">"I have $apples apples.\n"</span><span class="p">;</span>
<span class="k">print</span><span class="w"> </span><span class="s">"I have @{[$apples+$bananas]} fruit.\n"</span><span class="p">;</span><span class="w"> </span><span class="c1"># Uses the Perl array (@) interpolation.</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples.</span>
<span class="go">I have 7 fruit.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="PHP">PHP</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="PHP" title="PHP">PHP</a></div>
<div class="mw-highlight mw-highlight-lang-php mw-content-ltr" dir="ltr"><pre><span class="cp"><?php</span>
<span class="nv">$apples</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
<span class="nv">$bananas</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
<span class="k">echo</span> <span class="s2">"There are </span><span class="si">$apples</span><span class="s2"> apples and </span><span class="si">$bananas</span><span class="s2"> bananas.</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
<span class="k">echo</span> <span class="s2">"I have </span><span class="si">{</span><span class="nv">$apples</span><span class="si">}</span><span class="s2"> apples and </span><span class="si">{</span><span class="nv">$bananas</span><span class="si">}</span><span class="s2"> bananas."</span><span class="p">;</span>
</pre></div><p>The output will be:
</p><div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">There are 5 apples and 3 bananas.</span>
<span class="go">I have 5 apples and 3 bananas.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Python">Python</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Python_(programming_language)" title="Python (programming language)">Python (programming language)</a></div>
<p>Python supports string interpolation as of version 3.6, referred to as
"formatted string literals" or "f-strings".<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> Such a literal begins with an <code>f</code> or <code>F</code> before the opening quote, and uses braces for placeholders:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="n">num_apples</span> <span class="o">=</span> <span class="mi">4</span>
<span class="n">num_bananas</span> <span class="o">=</span> <span class="mi">3</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'I have </span><span class="si">{</span><span class="n">num_apples</span><span class="si">}</span><span class="s1"> apples and </span><span class="si">{</span><span class="n">num_bananas</span><span class="si">}</span><span class="s1"> bananas'</span><span class="p">)</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples and 3 bananas</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Ruby_/_Crystal">Ruby / Crystal</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby (programming language)</a></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Crystal_(programming_language)" title="Crystal (programming language)">Crystal (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-ruby mw-content-ltr" dir="ltr"><pre><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have </span><span class="si">#{</span><span class="n">apples</span><span class="si">}</span><span class="s2"> apples"</span>
<span class="c1"># Format string applications for comparison:</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have %s apples"</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">apples</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have %{a} apples"</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="p">{</span><span class="ss">a</span><span class="p">:</span><span class="w"> </span><span class="n">apples</span><span class="p">}</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Rust">Rust</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Rust_(programming_language)" title="Rust (programming language)">Rust (programming language)</a></div>
<p>Rust does not have general string interpolation, but provides similar functionality via macros, referred to as "Captured identifiers in format strings", introduced in version 1.58.0, released 2022-01-13.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p><p>Rust provides formatting via the <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/fmt/">std::fmt</a> module, which is interfaced with through various macros such as <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/macro.format.html">format!</a>, <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/macro.write.html">write!</a>, and <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/macro.print.html">print!</a>. These macros are converted into Rust source code at compile-time, whereby each argument interacts with a <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/nightly/std/fmt/struct.Formatter.html">formatter</a>. The formatter supports <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/fmt/#positional-parameters">positional parameters</a>, <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/fmt/#named-parameters">named parameters</a>, <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/fmt/#argument-types">argument types</a>, defining various <a rel="nofollow" class="external text" href="https://doc.rust-lang.org/stable/std/fmt/#formatting-traits">formatting traits</a>, and capturing identifiers from the environment.
</p>
<div class="mw-highlight mw-highlight-lang-rust mw-content-ltr" dir="ltr"><pre><span class="kd">let</span><span class="w"> </span><span class="p">(</span><span class="n">apples</span><span class="p">,</span><span class="w"> </span><span class="n">bananas</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="c1">// println! captures the identifiers when formatting: the string itself isn't interpolated by Rust.</span>
<span class="fm">println!</span><span class="p">(</span><span class="s">"There are {apples} apples and {bananas} bananas."</span><span class="p">);</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">There are 4 apples and 3 bananas.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Scala">Scala</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Scala_(programming_language)" title="Scala (programming language)">Scala (programming language)</a></div>
<p><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a> 2.10+ provides a general facility to allow arbitrary processing of a string literal, and supports string interpolation using the included <code>s</code> and <code>f</code> string interpolators. It is also possible to write custom ones or override the standard ones.
</p><p>The <code>f</code> interpolator is a compiler macro that rewrites a format string with embedded expressions as an invocation of String.format. It verifies that the format string is well-formed and well-typed.
</p>
<div class="mw-heading mw-heading4"><h4 id="The_standard_interpolators">The standard interpolators</h4></div>
<p>Scala 2.10+'s string interpolation allows embedding variable references directly in processed string literals. Here is an example:
</p>
<div class="mw-highlight mw-highlight-lang-scala mw-content-ltr" dir="ltr"><pre><span class="kd">val</span><span class="w"> </span><span class="n">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="kd">val</span><span class="w"> </span><span class="n">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span>
<span class="c1">//before Scala 2.10</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"I have %d apples\n"</span><span class="p">,</span><span class="w"> </span><span class="n">apples</span><span class="p">)</span>
<span class="n">println</span><span class="p">(</span><span class="s">"I have %d apples"</span><span class="w"> </span><span class="n">format</span><span class="w"> </span><span class="n">apples</span><span class="p">)</span>
<span class="c1">//Scala 2.10+</span>
<span class="n">println</span><span class="p">(</span><span class="s">s"I have </span><span class="si">$</span><span class="n">apples</span><span class="s"> apples"</span><span class="p">)</span>
<span class="n">println</span><span class="p">(</span><span class="s">s"I have </span><span class="si">${</span><span class="n">apples</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">bananas</span><span class="si">}</span><span class="s"> fruits"</span><span class="p">)</span>
<span class="n">println</span><span class="p">(</span><span class="s">f"I have </span><span class="si">$</span><span class="n">apples</span><span class="s">%d apples"</span><span class="p">)</span>
</pre></div><p>
The output will be:</p><div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Sciter_(tiscript)">Sciter (tiscript)</h3></div>
<p>In Sciter any function with name starting from $ is considered as interpolating function and so interpolation is customizable and context sensitive:
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span><span class="nx">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">4</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">bananas</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">3</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">domElement</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">...;</span>
<span class="nx">domElement</span><span class="p">.</span><span class="nx">$content</span><span class="p">(</span><span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="nx">I</span><span class="w"> </span><span class="nx">have</span><span class="w"> </span><span class="p">{</span><span class="nx">apples</span><span class="p">}</span><span class="w"> </span><span class="nx">apples</span><span class="o"><</span><span class="err">/p>);</span>
<span class="nx">domElement</span><span class="p">.</span><span class="nx">$append</span><span class="p">(</span><span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="nx">I</span><span class="w"> </span><span class="nx">have</span><span class="w"> </span><span class="p">{</span><span class="nx">apples</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">bananas</span><span class="p">}</span><span class="w"> </span><span class="nx">fruits</span><span class="o"><</span><span class="err">/p>);</span>
</pre></div><p>
Where </p><div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="nx">domElement</span><span class="p">.</span><span class="nx">$content</span><span class="p">(</span><span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="nx">I</span><span class="w"> </span><span class="nx">have</span><span class="w"> </span><span class="p">{</span><span class="nx">apples</span><span class="p">}</span><span class="w"> </span><span class="nx">apples</span><span class="o"><</span><span class="err">/p>);</span>
</pre></div><p> gets compiled to this:
</p><div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="nx">domElement</span><span class="p">.</span><span class="nx">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"<p>I have "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">apples</span><span class="p">.</span><span class="nx">toHtmlString</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">" apples</p>"</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Snobol">Snobol</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="SNOBOL" title="SNOBOL">SNOBOL</a></div>
<div class="mw-highlight mw-highlight-lang-snobol mw-content-ltr" dir="ltr"><pre> <span class="n">apples</span> <span class="o">=</span> <span class="mi">4</span> <span class="p">;</span> <span class="n">bananas</span> <span class="o">=</span> <span class="mi">3</span>
<span class="n">Output</span> <span class="o">=</span> <span class="s">"I have "</span> <span class="n">apples</span> <span class="s">" apples."</span>
<span class="n">Output</span> <span class="o">=</span> <span class="s">"I have "</span> <span class="p">(</span><span class="n">apples</span> <span class="o">+</span> <span class="n">bananas</span><span class="p">)</span> <span class="s">" fruits."</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples.</span>
<span class="go">I have 7 fruits.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Swift">Swift</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Swift_(programming_language)" title="Swift (programming language)">Swift (programming language)</a></div>
<p>In <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>, a new String value can be created from a mix of constants, variables, literals, and expressions by including their values inside a string literal.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> Each item inserted into the string literal is wrapped in a pair of parentheses, prefixed by a backslash.
</p>
<div class="mw-highlight mw-highlight-lang-fsharp mw-content-ltr" dir="ltr"><pre><span class="k">let</span><span class="w"> </span><span class="nv">apples</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span>
<span class="n">print</span><span class="o">(</span><span class="s">"I have </span><span class="err">\</span><span class="s">(apples) apples"</span><span class="o">)</span>
</pre></div><p>The output will be:
</p><div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Tcl">Tcl</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Tcl" title="Tcl">Tcl</a></div>
<p>The Tool Command Language has always supported string interpolation in all quote-delimited strings.
</p>
<div class="mw-highlight mw-highlight-lang-tcl mw-content-ltr" dir="ltr"><pre><span class="k">set</span><span class="w"> </span>apples<span class="w"> </span><span class="mi">4</span>
<span class="nb">puts</span><span class="w"> </span><span class="s2">"I have $apples apples."</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples.</span>
</pre></div>
<p>In order to actually format – and not simply replace – the values, there is a formatting function.
</p>
<div class="mw-highlight mw-highlight-lang-tcl mw-content-ltr" dir="ltr"><pre><span class="k">set</span><span class="w"> </span>apples<span class="w"> </span><span class="mi">4</span>
<span class="nb">puts</span><span class="w"> </span><span class="k">[</span><span class="nb">format</span><span class="w"> </span><span class="s2">"I have %d apples."</span><span class="w"> </span><span class="nv">$apples</span><span class="k">]</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="TypeScript">TypeScript</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="TypeScript" title="TypeScript">TypeScript</a></div>
<p>As of version 1.4, <a href="TypeScript" title="TypeScript">TypeScript</a> supports string interpolation using backticks <code>``</code>. Here is an example:
</p>
<div class="mw-highlight mw-highlight-lang-typescript mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span><span class="nx">apples</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">4</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`I have </span><span class="si">${</span><span class="nx">apples</span><span class="si">}</span><span class="sb"> apples`</span><span class="p">);</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">I have 4 apples</span>
</pre></div>
<p>The <code>console.log</code> function can be used as a <code>printf</code> function. The above example can be rewritten, thusly:
</p>
<div class="mw-highlight mw-highlight-lang-typescript mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span><span class="nx">apples</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">4</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"I have %d apples"</span><span class="p">,</span><span class="w"> </span><span class="nx">apples</span><span class="p">);</span>
</pre></div>
<p>The output remains the same.
</p>
<div class="mw-heading mw-heading3"><h3 id="Visual_Basic_.NET">Visual Basic .NET</h3></div>
<p>As of Visual Basic 14, string interpolation is supported in Visual Basic.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-vbnet mw-content-ltr" dir="ltr"><pre><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Tom"</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="err">$</span><span class="s">"Hello, {name}"</span><span class="p">)</span>
</pre></div>
<p>The output will be:
</p>
<div class="mw-highlight mw-highlight-lang-output mw-content-ltr" dir="ltr"><pre><span class="go">Hello, Tom</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Concatenation" title="Concatenation">Concatenation</a></li>
<li><a href="Improper_input_validation" title="Improper input validation">Improper input validation</a></li>
<li><a href="Printf_format_string" class="mw-redirect" title="Printf format string">printf format string</a></li>
<li><a href="Quasi-quotation" title="Quasi-quotation">Quasi-quotation</a></li>
<li><a href="String_literal" title="String literal">String literal</a></li>
<li><a href="Substitution_(logic)" title="Substitution (logic)">Substitution</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text">"<a rel="nofollow" class="external text" href="http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf">Enforcing Strict Model-View Separation in Template Engines</a>", T. Parr (2004), WWW2004 conference.</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://perlmeme.org/howtos/using_perl/interpolation.html">"Interpolation in Perl"</a>. <q>This is much tidier than repeat uses of the '.' concatenation operator.</q></cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://code.google.com/p/smallest-template-system/wiki/SimplestAlgorithm">"smallest-template-system/Simplest algorithms"</a>, an online tutorial for placeholder-template-systems.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121019065315/http://google-caja.googlecode.com/svn/changes/mikesamuel/string-interpolation-29-Jan-2008/trunk/src/js/com/google/caja/interp/index.html#-autogen-id-1">"Secure String Interpolation"</a>. <i>google-caja.googlecode.com</i>. Archived from <a rel="nofollow" class="external text" href="http://google-caja.googlecode.com/svn/changes/mikesamuel/string-interpolation-29-Jan-2008/trunk/src/js/com/google/caja/interp/index.html#-autogen-id-1">the original</a> on 2012-10-19.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/#string-interpolation">"Strings - C# Programming Guide"</a>. 15 March 2024.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/golang/go/issues/34174">"proposal: Go 2: string interpolation #34174"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/golang/go/issues/50554">"proposal: Go 2: string interpolation evaluating to string and list of expressions #50554"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/golang/go/issues/57616">"proposal: spec: add simple string interpolation similar to Swift · Issue #57616 · golang/go"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2025-05-19</span></span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://groovy-lang.org/syntax.html#_string_interpolation">"The Apache Groovy programming language - Syntax"</a>. <i>groovy-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-06-20</span></span>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://haxe.org/manual/lf-string-interpolation.html">"Haxe - Manual - String interpolation"</a>. <i>Haxe - The Cross-platform Toolkit</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-09-12</span></span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external free" href="https://docs.oracle.com/en/java/javase/23/migrate/significant-changes-jdk-release.html">https://docs.oracle.com/en/java/javase/23/migrate/significant-changes-jdk-release.html</a></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://developer.mozilla.org/docs/Web/JavaScript/Reference/Template_literals">"Template literals (Template strings) - JavaScript | MDN"</a>. 31 May 2024.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.python.org/3/tutorial/inputoutput.html#tut-f-strings">"The Python Tutorial: 7.1.1. Formatted String Literals"</a>.</cite></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.python.org/3/reference/lexical_analysis.html#f-strings">"The Python Language Reference: 2.4.3. Formatted string literals"</a>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.python.org/dev/peps/pep-0498/">"PEP 498 -- Literal String Interpolation"</a>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html#captured-identifiers-in-format-strings">"Announcing Rust 1.58.0: Captured identifiers in format strings"</a>. 2022-01-13.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html">"Strings and Characters — The Swift Programming Language (Swift 5.5)"</a>. <i>docs.swift.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-06-20</span></span>.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite id="CITEREFKathleenDollard" class="citation web cs1">KathleenDollard. <a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/strings/interpolated-strings">"Interpolated Strings - Visual Basic"</a>. <i>docs.microsoft.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-06-20</span></span>.</cite></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-05" href="https://en.wikipedia.org/wiki/?title=String_interpolation&oldid=1294146210">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>